package com.sz.common.base.dto;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sz.common.base.i18n.I18nMessageHelper;
import com.sz.common.base.message.MessageCode;

/**
 * Function: api返回的统一包装类 <br>
 * Author: wentao.chang <br>
 * Date: 2016-10-25 10:42:00
 */
public class ResultDto {
    /**
     * 返回的错误码，默认为零表示接口正常处理
     */
    private int errorCode = 0;
    /**
     * 返回的错误信息，默认为空表示接口正常处理
     */
    private String msg = "";
    /**
     * 返回的业务数据
     */
    private Object data;

    public int getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    /**
     * 创建新的结果对象
     */
    public ResultDto() {

    }

    /**
     * 创建新的结果对象
     *
     * @param data result data
     */
    public ResultDto(Object data) {
        this.setData(data);
    }

    /**
     * 创建新的结果对象
     *
     * @param errorCode error code
     * @param message   message
     */
    public ResultDto(int errorCode, String message) {
        this.setErrorCode(errorCode);
        this.setMsg(message);
    }

    @Override
    public String toString() {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = null;
        try {
            jsonString = mapper.writeValueAsString(this);
            return jsonString;
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 创建ResultDto
     *
     * @param messageCode
     * @param args
     * @return
     */
    public static ResultDto createResult(MessageCode messageCode, Object... args) {
        Object[] iArgs = (args != null && args.length > 0) ? args : messageCode.getDefaultArguments();
        String message = I18nMessageHelper.getI18nMessage(messageCode.getMessageKey(), iArgs);
        return new ResultDto(messageCode.getCode(), message);
    }
}
